const express = require("express");
const path = require("path");
// 引入 http-proxy-middleware
const { createProxyMiddleware } = require("http-proxy-middleware");
// 引入 sha1
const sha1 = require("sha1");

const app = express();

// TOKEN, 目前是写死的
//    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=【xxx】&secret=【yyy】
const access_token =
  "75_bEQf0b8-ciQZVu6lE1q5XPa3moxItGUdIOpuB-VTfyNDqinWvLGLSdmhve0HQ8O7O2PPRhFTQUJNI-CxvYUXvkfIAO11ba_mmKe8uAWBIrev1rzApQrjfXKCArEKHMhAIAURW";

// TICKET, 目前是写死的
//    https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=【xxxx】&type=jsapi
const jsapi_ticket =
  "kgt8ON7yVITDhtdwci0qeVC3iHRHKpHD2Xdhic2e1ZY9rI__VYVB_lypYbk83XRGM1yd9M0n4ukiS7Ugk1D4Ig";

// 静态资源托管
app.use(express.static(path.resolve(__dirname, "./public")));

// 代理跨域
app.use(
  "/api",
  createProxyMiddleware({
    target: "https://api.weixin.qq.com", // 目标域名
    changeOrigin: true,
    // 路径重写
    pathRewrite: {
      "^/api": "", // rewrite path
    },
  })
);

/**
 * 该接口用于 微信网页开发的 wx.config 提供的签名参数
 */
app.get("/getMpConfig", (req, res) => {
  /**
   * 获取签名
   *    参数有：
   *      1. noncestr       随机字符串
   *      2. jsapi_ticket   临时凭证
   *      3. timestamp      时间戳
   *      4. url            前端传递，调用当前接口的网页地址【不能有#后面的部分】
   *
   *    步骤：
   *
   *      1. 要将 这四个参数按照 字典序排序，排序好之后，拼接成查询字符串【key1=value1&key2=value2】
   *      2. 将上面的 字符串做 sha1 hash, hash 之后的内容就是签名
   */
  const noncestr = "ABCDED";
  // const jsapi_ticket = jsapi_ticket;
  const timestamp = Math.floor(new Date().getTime() / 1000); // 秒数
  console.log("=== timestamp", timestamp);
  const url = req.query.url;

  // 排序且生成查询字符串
  const string1 = `jsapi_ticket=${jsapi_ticket}&noncestr=${noncestr}&timestamp=${timestamp}&url=${url}`;

  const hash = sha1(string1);

  // 将前端需要的内容给返回
  res.send({
    appId: "wx9c1cc1eb2938caa8",
    timestamp,
    nonceStr: noncestr,
    signature: hash,
  });
});

app.listen(5500, () => {
  console.log("服务启动成功");
});
